﻿#include "input.h"
#include "ui_input.h"
#include "QMessageBox"
#include "QSqlDatabase"
#include "QSqlQueryModel"
#include "QSqlTableModel"
#include "QTableView"
#include "QSqlQuery"
#include "QTime"
#include "QDebug"
#include "QTimer"
#include "QSqlRecord"


Input::Input(QWidget *parent,account_db* input_account_db) :
    QWidget(parent),
    input_data_db(input_account_db),
    ui(new Ui::Input)
{
     ui->setupUi(this);

     //创建定时器，每1S更新一次时间
     QTimer *timer = new QTimer;
     timer->start(1000);
     connect(timer,SIGNAL(timeout()),this,SLOT(Timer_Handle()));
     m_time = new QTime;
     QDate now_data;
     ui->dateEdit->setDate(now_data.currentDate());
}


Input::~Input()
/*
*功能：析构函数
*
*/
{
    delete ui;
}


void Input::Timer_Handle()
{
    now_time = m_time->currentTime().toString();
}


void Input::on_cancel_clicked()
/*
*功能：删除实例化对象
*
*/
{
   emit Delate_Win("input");
}


//void Input::Clear_Text()
//{
//    ui->lineEdit->clear();
//    ui->lineEdit_2->clear();

//}


void Input::show_groups(QStringList g_list)
{
    ui->comboBox_2->clear();
    ui->comboBox_2->addItems(g_list);
}

bool Input::Pretre_Cheack(char func)
/*
 * 插入数据前的判断
 */
{
    switch (func) {
    case func_add:
    case func_delet:
        if(ui->lineEdit->text().isEmpty()||ui->lineEdit_2->text().isEmpty())
        {
           QMessageBox::warning(this,QStringLiteral("警告"),QStringLiteral("输入内容不能为空，请重新输入！"),QMessageBox::Ok);
           return false;
        }
        if(ui->comboBox_2->currentText().isEmpty())
        {
            QMessageBox::warning(this,QStringLiteral("警告"),QStringLiteral("请选择一个分组！"),QMessageBox::Ok);
            return false;
        }
        break;
    }
    return true;
}
bool Input::Pretre_Cheack(char func, QList<QString> &row_list, QList<QString> &condition_list)
/*
 * 插入数据前的判断
 */
{
    QList<QString> temp_list = get_input_data();
    switch (func) {
    case func_select:
         //姓名选择
         if(ui->checkBox_4->checkState()){
             if(ui->lineEdit->text().isEmpty())
             {
                QMessageBox::warning(this,QStringLiteral("警告"),QStringLiteral("姓名内容不能为空，请重新输入！"),QMessageBox::Ok);
                return false;
             }
             else{
                 row_list<<"personName";
                 condition_list<<temp_list[0];
             }
         }
         //金额选择
         if(ui->checkBox_3->checkState()){
             if(ui->lineEdit_2->text().isEmpty())
             {
                QMessageBox::warning(this,QStringLiteral("警告"),QStringLiteral("金额内容不能为空，请重新输入！"),QMessageBox::Ok);
                return false;
             }
             else{
                row_list<<"amount";
                condition_list<<temp_list[1];

             }
         }
         //时间选择
         if(ui->checkBox->checkState()){
             row_list<<"time";
             condition_list<<temp_list[3];
         }
         //备注选择
         if(ui->checkBox_5->checkState()){
             row_list<<"remark";
             condition_list<<temp_list[4];
         }
         //账簿选择
         if(ui->checkBox_2->checkState()){
             row_list<<"groupName ";
             condition_list<<temp_list[2];
         }
         if(row_list.isEmpty()){
             QMessageBox::warning(this,QStringLiteral("警告"),QStringLiteral("请对需要查询的内容进行勾选！"),QMessageBox::Ok);
             return false;
         }
    break;
    }
    return true;
}
QList<QString> Input::get_input_data()
{
    //判别送出还是收入
    QList<QString> str_list;
    float Dir;
    QString remark = ui->lineEdit_3->text();
    if(remark.isEmpty())
       remark +=QStringLiteral("无") ; //添加信息的备注
    QString Select_Type = ui->comboBox->currentText();
    QString select_group = ui->comboBox_2->currentText();
    if(Select_Type==QStringLiteral("送出")||Select_Type==QStringLiteral("送出（代）"))
        Dir = -1 ;
    else
        Dir = 1 ;
    if (Select_Type==QStringLiteral("送出（代）")||Select_Type== QStringLiteral("收入（代）"))
        remark += QStringLiteral("  代情");
    //输入的姓名缓冲
    QString m_name = ui->lineEdit->text();
    //输入的金额缓冲
    QString Str = ui->lineEdit_2->text();
    float amount =  Str.toFloat();
    amount = Dir*amount;
    QString amount_str = QString::number(amount);
    //输入的日期缓冲
    QString m_Date = ui->dateEdit->text();

    str_list.append(m_name);
    str_list.append(amount_str);
    str_list.append(select_group);
    str_list.append(m_Date);
    str_list.append(remark);

    return str_list;
}

void Input::on_btn_in_clicked()
/*
*功能：数据库进行封装处理：确认添加按钮函数
*补充：后期需添加多个用户时，需要指定对应的数据库连接
*/
{
    Input_Fun = func_add;
    if(Pretre_Cheack(Input_Fun)) //插入前进行安全检查
    {
        QList<QString> temp_list = get_input_data();
        database_add(temp_list[0],temp_list[1],temp_list[2],temp_list[3],temp_list[4]);
     }
}
void Input::database_add(
                      QString person,
                      QString amount,
                      QString group,
                      QString date,
                      QString remark)
/*
*功能：数据库插入数据：
*添加：人名 金额  组 时间 备注
*返回：1：添加成功  0：添加失败
*/
{
    input_data_db->insert_person_data(person);
    input_data_db->insert_group_data(group);
    char ok = input_data_db->insert_relation_data( person,amount,group,date,remark);
    if(ok == input_data_db->I_SUCCESS)
           emit Text_Message(now_time +" " +person +" "+ amount+" "+date +" "+remark+ QStringLiteral(" 已入库"));
    else if(ok == input_data_db->I_EXIST)
        emit Text_Message(now_time + " " + QStringLiteral("入库失败！姓名和日期数据已经存在，请检查是否重复输入"));
    else
        emit Text_Message(now_time + " " + QStringLiteral("入库失败！添加数据操作失败，请检查输入"));
}
void Input::database_delete(
                      QString person,
                      QString amount,
                      QString group,
                      QString date,
                      QString remark)
/*
*功能：数据库删除数据：
*添加：人名 金额  组 时间
*返回：1：添加成功  0：添加失败
*/
{
    char ok = input_data_db->delete_relation_data_accurate(person,amount,group,date,remark);
    if(ok == input_data_db->I_SUCCESS)
           emit Text_Message(now_time +" " +person +" "+ amount+" "+date +" "+remark+ QStringLiteral(" 已出库"));
    else if(ok == input_data_db->I_NOT_EXIST)
        emit Text_Message(now_time + " " + QStringLiteral("出库失败！姓名和日期数据不存在，请检查是否正确"));
    else
        emit Text_Message(now_time + " " + QStringLiteral("出库失败！删除数据操作失败，请检查输入"));
}

//int Input::M_Sql_Id()
///*
//*功能：数据库进行封装处理：返回数据库的最大id值，用于
//*返回：1：修改成功 0：修改失败
//*/
//{
//    QSqlQuery query(db);
//    query.exec(QString("select id from person"));
//    QSqlRecord rec = query.record();
//    //移动到查询结果的下一条记录
//    if(query.last())
//    {
//       int t_ID = rec.indexOf("id");
//       return query.value(t_ID).toInt();
//    }
//    else
//       return false;
//}

///*
//*功能：数据库进行封装处理：检查数据库中是否有相同的输入项,有则修改，无则退出
//*返回：1：修改成功 0：修改失败
//*/
//char Input::M_Sql_Update(QString m_name, QString m_type,int m_num, QString m_date)
//{
//    QSqlQuery query(m_db);
//    query.exec(QString("select * from person"));
//    QSqlRecord rec = query.record();
//    emit Text_Message(QStringLiteral("查询到此人记录如下："));
//    //移动到查询结果的下一条记录
//    while(query.next())
//    {
//        //数据库读取的名字需要去掉空格
//        int t_name = rec.indexOf("name");
//        int t_date = rec.indexOf("date");
//        int t_ID = rec.indexOf("id");
//        int t_num = rec.indexOf("num");
//        int t_type = rec.indexOf("type");
//        QString temp_type = query.value(t_type).toString();
//        int temp_id = query.value(t_ID).toInt();
//        int temp_num = query.value(t_num).toInt();
//        QString temp_name = query.value(t_name).toString();
//        QString temp_date = query.value(t_date).toString();
//        qDebug()<<"name:"<<temp_name<<" date: "<<temp_date;
//        if(temp_name==m_name)
//        {
//            Text_Message(QString::number(temp_id)+" "+temp_name
//                         +" "+QString::number(temp_num)+" "+temp_date);
//           if(temp_date==m_date&&temp_type==m_type)
//           {
//              int Box = QMessageBox::information(this,QStringLiteral("提示"),
//                                           QStringLiteral("是否确认修改？"),QMessageBox::Ok|QMessageBox::Cancel);
//              if(Box==QMessageBox::Ok)
//              {
//                query.exec(QString("update person set type = %1 where id = %2").arg(m_type).arg(t_ID));
//                query.exec(QString("update person set  num = %1 where id = %2").arg(m_num).arg(t_ID));
//                return true;
//              }
//              else
//                return false;

//           }
//        }
//    }
//    return false;
//}


void Input::on_btn_in_2_clicked()
/*
*功能：修改数据库按钮,人机交互反馈
*返回：无
*/
{
//   if(Pretre_Handle(Update)&&M_Sql_Update(db,m_name, Select_Type,m_num,m_Date))
//    {
//       emit Text_Message(now_time + " " +  Select_Type +" " +m_name +"-"+ Str+"-"+m_Date +" "+ QStringLiteral("已修改"));
//       QMessageBox::information(this,QStringLiteral("提示"),
//                               QStringLiteral("修改数据成功!"),QMessageBox::Ok);
//   }
//    else
//   {
//       emit Text_Message(now_time + " " + QStringLiteral(" 修改数据失败，请重新输入 "));
//       QMessageBox::warning(this,QStringLiteral("提示"),
//                               QStringLiteral("修改数据失败，请重新输入!"),QMessageBox::Ok);
//   }
}


void Input::on_btn_in_3_clicked()
/*
*功能：查询按钮
*返回：
*/
{
    QList<QString> row_list, conditon_list;
    //列表使用前清零
    row_list.clear();
    conditon_list.clear();
    Input_Fun = func_select;
    if(Pretre_Cheack(Input_Fun,row_list, conditon_list)){
         database_select(row_list,conditon_list);
    }

}


void Input::database_select(QList<QString> row_list, QList<QString> condition_list)
/*
*功能：查询函数
*返回：
*/
{
    QList<QString> temp_list = input_data_db->select_relation_items(row_list,condition_list);
    emit  Text_Message(now_time+QStringLiteral("查询到匹配记录如下："));
    //移动到查询结果的下一条记录
    //数据库读取的名字需要去掉空格
    while(!temp_list.isEmpty()){
        QString temp = temp_list.front();
        emit Text_Message(temp);
        temp_list.pop_front();
    }
    emit  Text_Message(now_time+" "+QStringLiteral("查询完成！"));
}

void Input::on_pushButton_clicked()
/*
 * 删除数据按钮
 */
{

    Input_Fun = func_delet;
    if(Pretre_Cheack(Input_Fun)) //插入前进行安全检查
    {
        int choose = QMessageBox::warning(this,QStringLiteral("警告"),
                              QStringLiteral("请再次确认是否删除数据!"),QMessageBox::Yes|QMessageBox::No);
        if(choose == QMessageBox::Yes){
            QList<QString> temp_list = get_input_data();
            database_delete(temp_list[0],temp_list[1],temp_list[2],temp_list[3],temp_list[4]);
        }
    }
}
